package methodref02;

import org.junit.Test;

import java.util.function.Consumer;
import java.util.function.Supplier;

/*
* 非静态成员引用格式
*   对象名::方法名
* */
public class MethodRefDemo02 {
    @Test
    //  测试无参getName()
    public void test01(){
        Person p = new Person("老王");

        //Supplier<String> s = ()->p.getName();

        //改造后
        Supplier<String> s = p::getName;


        System.out.println(s.get());  // 老王
    }

    @Test
    // 测试有参setName(String name)
    public void test02(){
        Person p = new Person("老王");
        //Consumer<String> c = name -> p.setName(name);

        // 改造后
        Consumer<String> c =  p::setName;
        c.accept("老李");
        System.out.println(p);  // Person{name='老李'}
    }

    @Test
    // 测试字符串长度
    public void test03(){
        String str = "abc";
        // Supplier<Integer> s = ()-> str.length();

        Supplier<Integer> s = str::length;
        System.out.println(s.get()); // 3
    }

    @Test
    public void test04(){
        String str = "abc";
        //Supplier<Character> s = ()->str.charAt(1);

        //Supplier<Character> s = str::charAt;
        // 因为s.get()不能传参数，而charAt(1)又需要传参数
        //引用的方法和Lambda表达式对应接口中的抽象方法的形参类型保持不一致
        // 导致不能被简化
        //System.out.println(s.get()); // b
    }
}
